package com.hhkj.admin.bank.service.extend;

import com.hhkj.admin.bank.domain.Bank;
import com.hhkj.admin.bank.domain.BankRule;
import com.hhkj.admin.bank.model.dopo.BankDo;
import com.hhkj.admin.bank.model.dopo.BankPo;
import com.hhkj.admin.bank.model.req.BankReq;
import com.hhkj.admin.bank.model.res.BankRes;
import com.ruoyi.common.base.biz.service.extend.BaseExtendService;

import java.util.List;

/**
 * BankServiceExtend
 *
 * @author HHKJ-SERVER-ZJ
 * @since 2023/6/8 11:29
 */
public interface BankExtendService extends BaseExtendService<Bank, BankDo, BankPo>
{

    /**
     * 根据规则id列表获取发布题库信息
     *
     * @param ruleIdList 规则id列表
     * @return 题库列表信息
     */
    List<BankPo> listPublishPoByRuleIdList(List<Long> ruleIdList, String typeCode);

    /**
     * 题库上架准备工作
     *
     * @param bankPo 题库信息
     * @param rulePo 选题规则信息
     */
    void prepareBeforePublish(BankRes bankPo, BankRule rulePo);

    /**
     * 根据 科目id和类别题库类型id批量更新上下架信息
     *
     * @param courseId         科目id
     * @param courseBankTypeId 类别类型id
     * @param publishFlag      上下架标签 1-是 0-否
     */
    void updateBatchPublishFlagByCourseIdAndCourseBankType(Long courseId, Long courseBankTypeId, Integer publishFlag);

    /**
     * 获取题库信息 包括题目列表信息
     *
     * @param parentId 上级题库id
     * @param ruleId   规则id
     * @param typeCode 类型编码
     * @return 题库信息
     */
    BankRes getBankIncludeQuestionGroupList(Long parentId, Long ruleId, String typeCode);

    /**
     * 根据题库配置规则获取相关的题库信息列表
     *
     * @param bankRule 题库选题规则
     * @return 题库列表 -包含题目列表
     */
    List<BankRes> listResIncludeQuestionListByRule(BankRule bankRule);

    /**
     * 根据上级题库id删除题库信息
     *
     * @param parentIdList 上级题库id
     * @return true/false
     */
    boolean removeByParentIdList(List<Long> parentIdList);

    /**
     * 新增扩展方法
     *
     * @param bankDoList 题库信息列表
     * @return true/false
     */
    boolean saveBatch(List<BankReq> bankDoList);

    /**
     * 新增扩展方法
     *
     * @param bankDo 题库信息
     * @return true/false
     */
    boolean save(BankReq bankDo);

    /**
     * 获取上线题库信息
     *
     * @param courseId         科目id
     * @param courseBankTypeId 类别类型id
     * @param typeCode         类型编码 练习题库:practise、测试题库:test
     * @return 题库信息
     */
    BankRes getPublishBank(Long courseId, Long courseBankTypeId, String typeCode);

    /**
     * 获取上线题库信息
     *
     * @param id 数据id
     * @return 题库信息
     */
    BankRes getResById(Long id);

    /**
     * 获取上线题库信息
     *
     * @param parentId 上级数据id
     * @param typeCode 类型编码
     * @return 题库信息
     */
    BankRes getByParentIdAndTypeCode(Long parentId, String typeCode);
}
